#include "mywidget.h"
#include "ui_mywidget.h"
#include "mylabel.h"
#include <QLabel>

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    //这个代码，new了对象之后，咋没有delete呢
    //不delete不就出现内存泄漏了吗
    //下面代码在Qt中不会产生内存泄露。label对象会合适的时候被析构释放(虽然没有手动写delete，确实能释放)
    //前端开发（网页开发)也涉及到类似的对象树（DOM）.本质上也是一个树形结构（N叉树），通过树形结构把界面上的各种元素组织起来
    //Qt中也是类似，也是搞了一个对象树，也是N叉树，把界面上的各种元素组织起来了
    //使用对象树，把这些内容组织起来，最主要的目的，就是为了能够在合适的时机(窗口关闭/销毁)把这些对象统一进行释放
    //这里的树上的这些对象，统一销毁是最好不过的，如果某个对象提前销毁，此时就会导致对应的控件就在界面上不存在了
    // 更推荐这种在堆上创建的方式.
//    QLabel* label = new QLabel(this);
//    label->setText("hello world");

    //试想一下，如果这个对象是按照栈上的变量创建的不delete不就出现内存泄漏了吗
    //但是可能会存在一些“提前释放”的问题。
    //在栈上创建,编译的时候,不会报错,但是运行的时候,这些内容不会显示到窗口上,因为窗口打开的时候,此时label对象随着构造函数的结束，就销毁了
//    QLabel label(this);
//    label.setText("hello world");

      MyLabel* mylabel = new MyLabel(this);
      mylabel->setText("hello world");
}

MyWidget::~MyWidget()
{
    delete ui;
}

